package com.gzsxy.JUC.tvolatile;

import java.util.concurrent.TimeUnit;

/**
 * 目的是为了明白，当线程A把num变量=0通过read和load到自己的工作内存当中后，
 * 线程main又去修改了num变量=1，这时因为线程A不知道主存已经把num值修改了所以程序是不会停止的
 */
public class JMMDemo {

    //不加 volatile  程序就会死循环
    //加了volatile 可以保证  可见性
    private volatile static int num = 0;

    public static void main(String[] args) { //main线程

        new Thread(() -> {
            while (num == 0) {

            }
        }, "A").start();


        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        num = 1;
        System.out.println(num);
    }


}
